package dao;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;

import excecoes.CaminhoAteJDKAindaNaoFoiInformadoException;
import excecoes.DAOException;
import excecoes.LinhaPrecisaManterEstadosVariaveisNotFound;


public class ConcreteDAOConfiguracoesSistema implements DAOConfiguracoesSistema {

	@Override
	public void modificarManterEstadosDasVariaveis(String nomeProjetoDeTestes, boolean precisaManterEstadosDasVariaveis) throws DAOException
	{
		
		 try{
			  //vamos guardar o novo arquivo 
			  File diretorioPastaDosTestes = new File("configuracoesTestboot");
			  if(diretorioPastaDosTestes.exists() != true)
			  {
				  //nao ha esse diretorio? entao vamos cria-lo
				  diretorioPastaDosTestes.mkdir();
			  }
			  //agora vamos guardar as confguracoes em um .txt
		      OutputStream file = new FileOutputStream( "configuracoesTestboot/" + nomeProjetoDeTestes + "config.txt" );
		     
		      PrintWriter escreveLinhasNoArquivo = new PrintWriter(file);
		     
		      try{
		        escreveLinhasNoArquivo.write("manter estados das variaveis:" + precisaManterEstadosDasVariaveis);
		      }
		      finally{
		    	  
		       escreveLinhasNoArquivo.close();
		       file.close();
		      }
		    }  
		    catch(Exception ex){
		      throw new DAOException();
		    } 
	}

	@Override
	public boolean precisaManterEstadosDasVariaveis(String nomeProjetoDeTestes) throws DAOException, LinhaPrecisaManterEstadosVariaveisNotFound
	{
		try{
			  //vamos guardar o novo arquivo 
			  File diretorioPastaDosTestes = new File("configuracoesTestboot");
			  if(diretorioPastaDosTestes.exists() != true)
			  {
				  throw new DAOException();
			  }
			  //agora vamos guardar os dados do objeto caso suite de testes em um .txt
		      InputStream file = new FileInputStream( "configuracoesTestboot/" + nomeProjetoDeTestes +"config.txt" );
		     
		      InputStreamReader leLinhasArquivoConfiguracao = new InputStreamReader(file);
		      BufferedReader bufferLeLinhasArquivo = new BufferedReader(leLinhasArquivoConfiguracao);
		      System.out.println("vai ler linha...!");
		      
		      try{
		    	  String linhaLidaConfiguracoes = bufferLeLinhasArquivo.readLine();
		    	  if(linhaLidaConfiguracoes.contains("manter estados das variaveis:"))
		    	  {
		    		  //achamos a linha que contem o booleanao que procuramos!
		    		  System.out.println("achamos a linha que contem o booleano que procuramos!");
		    		  String stringPrecisaManterEstadosVariaveis = linhaLidaConfiguracoes.replace("manter estados das variaveis:", "");
		    		  //remover espacos em branco...
		    		 stringPrecisaManterEstadosVariaveis.replaceAll("\\s","");
		    		 boolean precisaManterEstadosVariaveis = Boolean.valueOf(stringPrecisaManterEstadosVariaveis);
		    		 return precisaManterEstadosVariaveis;
		    		 
		    		  
		    	  }
		    	  else
		    	  {
		    		  throw new LinhaPrecisaManterEstadosVariaveisNotFound();
		    	  }
		    	
		      }
		      finally{
		         
		    	  bufferLeLinhasArquivo.close();
		    	  leLinhasArquivoConfiguracao.close();
		    	  file.close();
		      }
		    }  
		    catch(Exception ex){
		      throw new DAOException();
		    } 
	}

	@Override
	public void criarArquivoCaminhoAteJDK(String caminhoAteJDK)  throws DAOException
	{
		 try
		 {
			  //vamos guardar o novo arquivo 
			  File diretorioPastaDosTestes = new File("configuracoesTestboot");
			  if(diretorioPastaDosTestes.exists() != true)
			  {
				  //nao ha esse diretorio? entao vamos cria-lo
				  diretorioPastaDosTestes.mkdir();
			  }
			  //agora vamos guardar as confguracoes em um .txt
		      OutputStream file = new FileOutputStream( "configuracoesTestboot/" + "caminhoatejdk.txt" );
		     
		      PrintWriter escreveLinhasNoArquivo = new PrintWriter(file);
		     
		      try{
		        escreveLinhasNoArquivo.write("JDK:" + caminhoAteJDK);
		      }
		      finally{
		    	  
		       escreveLinhasNoArquivo.close();
		       file.close();
		      }
		    }  
		    catch(Exception ex){
		      throw new DAOException();
		    } 
		
	}

	@Override
	public String pegarCaminhoAteJDK() throws DAOException, CaminhoAteJDKAindaNaoFoiInformadoException 
	{
		try{
			  //vamos guardar o novo arquivo 
			  File diretorioPastaDosTestes = new File("configuracoesTestboot");
			  if(diretorioPastaDosTestes.exists() != true)
			  {
				  throw new DAOException();
			  }
			 
		      InputStream file = new FileInputStream( "configuracoesTestboot/" + "caminhoatejdk.txt" );
		     
		      InputStreamReader leLinhasArquivoConfiguracao = new InputStreamReader(file);
		      BufferedReader bufferLeLinhasArquivo = new BufferedReader(leLinhasArquivoConfiguracao);
		      
		      
		      try
		      {
		    	  String linhaLidaConfiguracoes = bufferLeLinhasArquivo.readLine();
		    	  if(linhaLidaConfiguracoes.contains("JDK:"))
		    	  {
		    		  //achamos a linha com o caminho ate a JDK"
		    		  String caminhoAteJDK = linhaLidaConfiguracoes.replace("JDK:", "");
		    		  //remover espacos em branco...
		    		  caminhoAteJDK.replaceAll("\\s","");
		    		  return caminhoAteJDK;
		    		 
		    		  
		    	  }
		    	  else
		    	  {
		    		  throw new CaminhoAteJDKAindaNaoFoiInformadoException();
		    	  }
		    	
		      }
		      finally
		      {
		         
		    	  bufferLeLinhasArquivo.close();
		    	  leLinhasArquivoConfiguracao.close();
		    	  file.close();
		      }
		    }  
		    catch(Exception ex)
		    {
		      throw new DAOException();
		    }
	}

}
